package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Materia;
import jschool.persistencia.Conexion;

public class ManejadorDeMateria {
	private static ManejadorDeMateria instancia = null;
	private ArrayList<Materia> materias = null;
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;

	private ManejadorDeMateria() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeMateria getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeMateria();
		}
		return instancia;
	}

	public ArrayList<Materia> getMaterias() {
		materias = new ArrayList<Materia>();
		try {
			String sql = "SELECT * FROM Materia";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Materia materia = new Materia(rs.getInt(1), rs.getString(2), rs
						.getString(3), rs.getString(4));
				materias.add(materia);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Materia",
					"Error", JOptionPane.ERROR_MESSAGE);
		}
		return materias;
	}

	public int agregarMateria(Materia materia) {
		int fila = 0;
		try {
			String sql = "INSERT INTO Materia (idMateria, nombreMateria, "
					+ "descripcion, tipoAula) VALUES(0,?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setString(1, materia.getNombreMateria());
			stmt.setString(2, materia.getDescripcion());
			stmt.setString(3, materia.getTipoAula());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Materias",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int modificarMateria(Materia materia, int id) {
		int fila = 0;
		try {
			String sql = "UPDATE Materia SET nombreMateria = ?, descripcion = ?, "
					+ "tipoAula = ? WHERE idMateria = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setString(1, materia.getNombreMateria());
			stmt.setString(2, materia.getDescripcion());
			stmt.setString(3, materia.getTipoAula());
			stmt.setInt(4, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Modificando Materia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int eliminarMateria(int id) {
		int fila = 0;
		try {
			String sql = "DELETE FROM Materia WHERE idMateria = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, id);
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Materia",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}
}
